package Model;

import java.util.ArrayList;

/**
 * Classe abstraite qui définit le comportement commun des pions et dames
 * @author El Meknassi Hamza (10806466) - Migeon Cyril (11007322)
 */
public abstract class Piece {
    //Couleur de la pièce
    private char couleur;
    //Sa position
    private Position position;
    private Damier damier;

    /**
     * COnstructeur d'une pièce
     * @param couleur
     * @param x
     * @param y
     * @param damier
     */
    public Piece(char couleur, int x, int y, Damier damier)
    {
        this.couleur = couleur;
        this.position = new Position (x,y);
        this.damier = damier;
    }

    /**
     * Get de la couleur
     * @return couleur - La couleur de la pièce
     */
    public char getCouleur(){return this.couleur;}
    /**
     * Get de la position
     * @return position - La position de la pièce
     */
    public Position getPosition(){return this.position;}
    /**
     * Get du damier
     * @return damier - Retourne le damier
     */
    public Damier getDamier(){return this.damier;}
    /**
     * Set de la position en fonction des coordonnées données en paramètre
     * @param x
     * @param y
     */
    public void setPosition(int x, int y)
    {
        this.position.setPosition(x, y);
    }
    /**
     * Set de la position en fonction de la position donnée en paramètre
     * @param position
     */
    public void setPosition(Position position)
    {
        this.position.setPosition(position);
    }

    /**
     * Verification de l'etat de la case
     * @param caseCible
     * @return <ul><li>Vrai si la case est disponible et utilisable</li><li>Faux sinon</li></ul>
     */
    public boolean verifierEtat(Case caseCible){
        boolean booleen = true;
        if(caseCible.getEtat() != 0)
            booleen = false;
        return booleen;
    }

    /**
     * Compare la couleur de deux pions
     * @param couleurJoueur
     * @param couleurPion
     * @return <ul><li>Vrai si les couleurs sont identiques</li><li>Faux sinon</li></ul>
     */
    public boolean verifierCouleur(char couleurJoueur, char couleurPion){
        boolean booleen = true;
        if(couleurJoueur != couleurPion)
            booleen = false;
        
        return booleen;
    }

    /**
     * Fonction abstraite redéfinie dans les classes Pion.java et Dame.java
     * @param caseDepart
     * @param caseCible
     * @param joueur
     * @param piecesJouables
     * @return int - code retour
     */
    public abstract int deplacer(Case caseDepart, Case caseCible, Joueur joueur, ArrayList<Piece> piecesJouables);

    /**
     * Fonction abstraite redéfinie dans les classes Pion.java et Dame.java
     * @param joueur
     * @return booleen - Vrai s'il peut manger, Faux sinon
     */
    public abstract boolean peutManger(Joueur joueur);
}
